﻿namespace SAPPDI.Entitys
{
    public class BaseInfo
    {
        private const double Gramos = 19.63;
        private const double Centimetros = 0.00254;
        private const double CostoBaseTinta = 0.12;
        private const double CostoPlacas = 312.0;
        public double CostoAcabados { get; set; }

        public double CostoPliegoindividual { get; set; }

        public double CostoLotePliegos { get; set; }

        public string TipoPapel { get; set; }

        public string Papel { get; set; }

        public double Gramaje { get; set; }

        /// <summary>
        /// si el valor es falso damos por echo que son gramos
        /// </summary>
        public bool Ispuntos { get; set; }

        public string Tintas { get; set; }

        public double CostoTintas { get; set; }

        public double CostoImpresionTintas { get; set; }

        public double CostoImpresionMargenTintas { get; set; }

        public Pliego Medida { get; set; }

        public double GetGramosCm()
        {
            if (Ispuntos)
            {
                return Gramaje * Centimetros;
            }
            return (Gramaje*Centimetros)/Gramos;

        }

        public string GetGramos()
        {
            var salida = this.Gramaje.ToString("N2");
            salida += Ispuntos ? " pts." : " gr.";
            return salida;
        }

        public double GetCostoTintas()
        {
            switch (this.Tintas)
            {
                case "1x0":
                    return 0.12;
                case "1x1":
                    return 0.24;
                case "4x0":
                    return 0.38;
                case "4x1":
                    return 0.87;
                case "4x4":
                    return 1.50;

            }
            if (string.IsNullOrEmpty(this.Tintas)) return 0.0;
            var split = Tintas.ToLower().Trim().Split('x');
            double tinta1;
            double tinta2;
            var estinta1 = double.TryParse(split[0], out tinta1);
            var estinta2 = double.TryParse(split[1], out tinta2);
            if (estinta1 && estinta2)
            {
                return (tinta1*CostoBaseTinta) + (tinta2*CostoBaseTinta);
            }
            return 0.0;
        }
         public double GetCostoPlacasTintas()
         {
             if (string.IsNullOrEmpty(this.Tintas)) return 0.0;
             var split = Tintas.ToLower().Trim().Split('x');
             double tinta1;
             double tinta2;
             var estinta1 = double.TryParse(split[0], out tinta1);
             var estinta2 = double.TryParse(split[1], out tinta2);
             if (estinta1 && estinta2)
             {
                 return (tinta1 +tinta2) * CostoPlacas;
             }
             return 0.0;
         }

         public string GetDesgloseImpresion()
         {
             return "$" + this.CostoImpresionTintas.ToString("N2") + " +15%: $" + this.CostoImpresionMargenTintas.ToString("N2");
         }

         public virtual double GetCostoTotal()
         {
             return this.CostoLotePliegos + GetCostoPlacasTintas() + this.CostoImpresionMargenTintas + CostoAcabados;
         }

    }
}
